﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using Loja_Virtual_Livraria.App_Code.Model;
using Loja_Virtual_Livraria.App_Code.BLL;

namespace Loja_Virtual_Livraria.App_Code.SQLServerDAL
{
    public class ProdutoDAL
    {
        public static void insertProduto(Produto myProduto)
        {
            SqlConnection myConnection = null;
            try
            {
                myConnection = SQLServerConnection.getConnection();
                SqlCommand myCommand = new SqlCommand("INSERT INTO Produto (nome, descricao, valor) " +
                "VALUES (@nome, @descricao, @valor)", myConnection);

                SqlParameter paramNome = new SqlParameter("nome", SqlDbType.VarChar);
                paramNome.Direction = ParameterDirection.Input;
                paramNome.Value = myProduto.getNome();

                SqlParameter paramDescricao = new SqlParameter("descricao", SqlDbType.VarChar);
                paramDescricao.Direction = ParameterDirection.Input;
                paramDescricao.Value = myProduto.getDescricao();

                SqlParameter paramValor = new SqlParameter("valor", SqlDbType.Money);
                paramValor.Direction = ParameterDirection.Input;
                paramValor.Value = myProduto.getValor();

                myCommand.Parameters.Add(paramNome);
                myCommand.Parameters.Add(paramDescricao);
                myCommand.Parameters.Add(paramValor);

                myConnection.Open();
                myCommand.ExecuteNonQuery();
            }
            finally
            {
                if (myConnection != null)
                    myConnection.Close();
            }
        }

        public static List<Produto> selectAllProduto()
        {
            SqlConnection myConnection = null;
            SqlDataReader myDataReader = null;
            List<Produto> listAllProduto = null;
            try
            {
                myConnection = SQLServerConnection.getConnection();
                SqlCommand myCommand = new SqlCommand("SELECT * FROM Produto", myConnection);

                myConnection.Open();
                myDataReader = myCommand.ExecuteReader();

                listAllProduto = new List<Produto>();

                while (myDataReader.Read())
                {
                    Produto retrievedProduto = ProdutoBLL.newProduto();
                    retrievedProduto.setProdutoID(Convert.ToInt32(myDataReader["produtoId"].ToString()));
                    retrievedProduto.setNome(myDataReader["nome"].ToString());
                    retrievedProduto.setDescricao(myDataReader["descricao"].ToString());
                    retrievedProduto.setValor(Convert.ToDecimal(myDataReader["valor"].ToString()));
                    listAllProduto.Add(retrievedProduto);
                }
            }
            finally
            {
                if (myConnection != null)
                    myConnection.Close();

                if (myDataReader != null)
                    myDataReader.Close();
            }
            return listAllProduto;
        }

        public static Produto selectProdutoByID(int produtoID)
        {
            SqlConnection myConnection = null;
            SqlDataReader myDataReader = null;
            Produto retrievedProduto = null;

            try
            {
                myConnection = SQLServerConnection.getConnection();
                SqlCommand myCommand = new SqlCommand("SELECT * FROM Produto WHERE produtoID = @produtoID", myConnection);

                SqlParameter paramId = new SqlParameter("produtoID", SqlDbType.Int);
                paramId.Direction = ParameterDirection.Input;
                paramId.Value = produtoID;

                myCommand.Parameters.Add(paramId);

                myConnection.Open();
                myDataReader = myCommand.ExecuteReader();

                if (myDataReader.Read())
                {
                    retrievedProduto = ProdutoBLL.newProduto();
                    retrievedProduto.setProdutoID(Convert.ToInt32(myDataReader["produtoId"].ToString()));
                    retrievedProduto.setNome(myDataReader["nome"].ToString());
                    retrievedProduto.setDescricao(myDataReader["descricao"].ToString());
                    retrievedProduto.setValor(Convert.ToDecimal(myDataReader["valor"].ToString()));
                }
            }
            finally
            {
                if (myConnection != null)
                    myConnection.Close();

                if (myDataReader != null)
                    myDataReader.Close();
            }
            return retrievedProduto;
        }
    }
}